package com.whfc.mach.manager;

import com.whfc.common.obd.ObdFrame;
import com.whfc.mach.dto.AppMachDayDTO;
import com.whfc.mach.dto.AppMachInfo;
import com.whfc.mach.dto.obd.AppDeviceObdDataDTO;
import com.whfc.mach.dto.obd.ObdFrameItemDTO;
import com.whfc.mach.dto.obd.ObdMaintainDTO;
import com.whfc.mach.dto.obd.ObdParamDTO;
import com.whfc.mach.entity.AppDeviceObdLog;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Description:OBD数据管理服务
 * @author: xugcheng
 * @version: 1.0
 * @date: 2020/9/25 18:13
 */
public interface ObdDataMgr {

    /**
     * 添加OBD数据(0x06批量)
     *
     * @param obdLog
     * @param frameList
     */
    void addObdData(AppDeviceObdLog obdLog, List<ObdFrame> frameList);

    /**
     * 添加obd数据(0x05单个)
     *
     * @param obdLog
     */
    void addObdData(AppDeviceObdLog obdLog);

    /**
     * 统计obd设备一天数据
     *
     * @param machInfo
     * @param date
     */
    void statMachDayData(AppMachInfo machInfo, Date date);

    /**
     * 更新数据分段和工时
     *
     * @param machInfo
     * @param date
     */
    void updateMachDaySegment(AppMachInfo machInfo, Date date);

    /**
     * 统计obd设备油耗
     *
     * @param machId
     * @param date
     */
    void statObdOil(Integer machId, Date date);

    /**
     * 统计obd设备工时
     *
     * @param machId
     * @param date
     */
    void statObdSeg(Integer machId, Date date);

    /**
     * 统计obd设备放线总里程
     *
     * @param machId
     * @param date
     */
    void statObdLength(Integer machId, Date date);

    /**
     * 获取OBD硬件最新数据
     *
     * @param deviceId
     * @return
     */
    List<ObdFrame> getObdData(Integer deviceId);

    /**
     * 获取obd硬件的最新数据
     *
     * @param deviceId
     * @return
     */
    ObdParamDTO getObdParamData(Integer deviceId);

    /**
     * 获取OBD硬件数据
     *
     * @param deviceId
     * @param time
     * @return
     */
    AppDeviceObdDataDTO getObdData(Integer deviceId, Date time);

    /**
     * 获取设备每天数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    List<AppMachDayDTO> getMachDayDataList(Integer machId, Date startDate, Date endDate);

    /**
     * 增加离线数据点
     *
     * @param machId
     * @param time
     */
    void addOfflineData(Integer machId, Date time);

    /**
     * 获取obd总工时
     *
     * @param machId
     * @return
     */
    Double getObdTotalWorkHour(Integer machId);

    /**
     * 获取项目中设备保养信息
     *
     * @param deptIds
     * @return
     */
    Map<Integer, ObdMaintainDTO> getMachMaintainInfo(List<Integer> deptIds);

    /**
     * 修正obd硬件数据
     *
     * @param data
     */
    void amendObdDeviceData(AppDeviceObdLog data);
}
